
import javax.microedition.lcdui.*;

public class Jogo {

	public static final byte Vazio = 0;
	public static final byte Branco = 0;
	public static final byte Preto = 8;
	public static final byte Peca = 7;
	public static final byte Cor = 8;
	public static final byte Peao = 1;
	public static final byte Torre = 2;
	public static final byte Bispo = 3;
	public static final byte Cavalo = 4;
	public static final byte Rainha = 5;
	public static final byte Rei = 6;

  private int jogador;

  private byte tabuleiro[][] = new byte[8][];
  {
    for (int i = 0; i < 8; i++)
			tabuleiro[i] = new byte [8];
  }

	Image imagens[] = new Image[12];
	String[] arquivos =
	{
		"/imagens/branco/peao.gif",
		"/imagens/branco/torre.gif",
		"/imagens/branco/bispo.gif",
		"/imagens/branco/cavalo.gif",
		"/imagens/branco/rainha.gif",
		"/imagens/branco/rei.gif",
		"/imagens/preto/peao.gif",
		"/imagens/preto/torre.gif",
		"/imagens/preto/bispo.gif",
		"/imagens/preto/cavalo.gif",
		"/imagens/preto/rainha.gif",
		"/imagens/preto/rei.gif"
	};

  Jogo() throws Exception {

		for (int i = 0; i < 12; i ++)
			 imagens[i] = Image.createImage(arquivos[i]);

  }

  void iniciar() {

    resetaTabuleiro();

  }

  public void resetaTabuleiro() {

    int lin, col;

    for (lin = 2; lin <= 5; lin++)
			for (col = 0; col < 8; col ++)
				tabuleiro[lin][col] = Vazio;

  	for (col = 0; col < 8; col ++)
  		tabuleiro[1][col] = Peao + Preto;

  	tabuleiro[0][0] = tabuleiro[0][7] = Torre + Preto;
  	tabuleiro[0][1] = tabuleiro[0][6] = Cavalo + Preto;
  	tabuleiro[0][2] = tabuleiro[0][5] = Bispo + Preto;
    tabuleiro[0][3] = Rainha + Preto;
    tabuleiro[0][4] = Rei + Preto;

    for (col = 0; col < 8; col ++)
      tabuleiro[6][col] = Peao + Branco;

  	tabuleiro[7][0] = tabuleiro[7][7] = Torre + Branco;
  	tabuleiro[7][1] = tabuleiro[7][6] = Cavalo + Branco;
  	tabuleiro[7][2] = tabuleiro[7][5] = Bispo + Branco;
    tabuleiro[7][3] = Rainha + Branco;
    tabuleiro[7][4] = Rei + Branco;

    jogador = Branco;
  }

  public byte getPeca(int lin, int col) {

    return (tabuleiro[lin][col]);

  }

  public Image getImagem(byte peca) {

    return (imagens[(peca & Peca) - 1 + ((peca & Cor) == Preto ? 6 : 0)]);

  }

  public boolean movePeca(int lin_de, int col_de, int lin_para, int col_para) {

    if ((tabuleiro[lin_para][col_para] == Vazio) ||
      ((tabuleiro[lin_para][col_para] & Cor) != jogador)) {

      tabuleiro[lin_para][col_para] = tabuleiro[lin_de][col_de];
      tabuleiro[lin_de][col_de] = Vazio;
      jogador = (jogador == Branco ? Preto : Branco);

    }
    return (true);

  }

  public boolean vezBranco() {

    return (jogador == Branco);

  }

  public boolean podeMarcar(int lin, int col) {

    return (tabuleiro[lin][col] != Vazio && (tabuleiro[lin][col] & Cor) == jogador);

  }

}
